//
//  NSString+Utils.h
//  WeChatContacts-demo
//
//  Created by shen_gh on 16/3/12.
//  Copyright © 2016年 com.joinup(Beijing). All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSString (Utils)

/**
 *  将汉字转成的拼音
 *
 *  @return 拼音
 */
- (NSString *)pinyin;
/**
 * 返回字符串的第一个字符
 * @"" 会返回 @""
 */
- (NSString *)firstCharactor;
/**
 根据字符串字体最大宽度 获取字符串的size

 @param font 字体大小
 @param maxW 字符串最大宽度
 @return 字符串的size
 */
- (CGSize)sizeWithFont:(UIFont *)font maxW:(CGFloat)maxW;

/**
 获取字符串的size

 @param font 字体大小
 @return 字符串size
 */
- (CGSize)sizeWithFont:(UIFont *)font;

/**
 *  计算当前文件\文件夹的内容大小
 */
- (NSUInteger)fileSize;


#pragma mark -  NSDate互转NSString

/**
 将时间字符串转成date

 @param dateString 时间字符串
 @return 转换后的date数据
 */
+(NSDate *)NSStringToDate:(NSString *)dateString;
/**
 将时间字符串转成指定格式的 date
 
 @param dateString 时间字符串
 @param formatestr 时间格式
 @return 转换后的date数据
 */
+(NSDate *)NSStringToDate:(NSString *)dateString withFormat:(NSString *)formatestr;
/**
 将 data 数据转成指定格式的时间字符串

 @param dateFromString 需转换的data数据
 @param formatestr 时间格式
 @return 转换后的时间字符串
 */
+(NSString *)NSDateToString:(NSDate *)dateFromString withFormat:(NSString *)formatestr;

#pragma mark -  判断字符串是否为空,为空的话返回 “” （一般用于保存字典时）
/**
 判断是否为空字符串

 @param string 需要判空的字符串
 @return 返回字符串，如果为空，则返回 ""
 */
+(NSString *)IsNotNull:(NSString*)string;
/**
 判断字符串是否为空

 @param string 需要判断的字符串
 @return 是否为空
 */
+(BOOL) isBlankString:(id)string;


#pragma mark - 如何通过一个整型的变量来控制数值保留的小数点位数。以往我们通类似@"%.2f"来指定保留2位小数位，现在我想通过一个变量来控制保留的位数

/**
 获取保留小数后指定位数的字符串

 @param value 原始的小数 数据
 @param numberOfPlace 指定保留的位数
 @return 保留指定位数的小数值（字符串）
 */
+(NSString *)newFloat:(float)value withNumber:(int)numberOfPlace;


#pragma mark - 使用subString去除float后面无效的0
/**
 去掉字符串数据小数点后无效的0

 @param stringFloat 需处理的浮点型数据字符串
 @return 去除小数点后无效0的字符串
 */
+(NSString *)changeFloatWithString:(NSString *)stringFloat;



/**
 18位身份证号有效性验证
 */
- (BOOL)isValid18DigitsIdentityCard;
/**
 智享ID 有效性验证
 */
- (BOOL)isValidSmartCityID;

#pragma mark - 去除float后面无效的0
/**
 去掉浮点型数据小数点后无效的0
 
 @param floatValue 需处理的浮点型数据
 @return 去除小数点后无效0的字符串
 */
+(NSString *)changeFloatWithFloat:(CGFloat)floatValue;


#pragma mark -  手机号码验证
/**
 校验手机号是否合法

 @param mobile 需校验的手机号
 @return 是否合法
 */
- (BOOL)isValidMobileNumber;

#pragma mark - 字符串类型判断
/**
 判断是否包含中文
 */
- (BOOL)isChinese;

/**
 判断是否为整型

 @param string 需要判断的字符串
 @return 判断结果
 */
+ (BOOL)isPureInt:(NSString*)string;

/**
 判断是否为浮点形

 @param string 需要判断的字符串
 @return 判断结果
 */
+ (BOOL)isPureFloat:(NSString*)string;

#pragma mark -  计算内容文本的高度方法
/**
 计算内容文本的高度

 @param text 需要计算的文本
 @param font 字体大小
 @param contentWidth 指定的最大宽度
 @return 文本高度
 */
+ (CGFloat)HeightForText:(NSString *)text withSizeOfLabelFont:(CGFloat)font withWidthOfContent:(CGFloat)contentWidth;

#pragma mark -  计算字符串长度
/**
 计算字符串长度

 @param text 需要计算的文本
 @param font 字体大小
 @return 文本宽度
 */
+ (CGFloat)WidthForString:(NSString *)text withSizeOfFont:(CGFloat)font;


#pragma mark -  计算两个时间相差多少秒
/**
 计算两个时间相差多少秒

 @param currentDateString 第一个时间
 @param tomDateString 第二个时间
 @return 时间差（秒）
 */
+(NSInteger)getSecondsWithBeginDate:(NSString*)currentDateString  AndEndDate:(NSString*)tomDateString;

#pragma mark - 根据出生日期获取年龄
/**
 根据出生日期获取年龄

 @param date 出生日期
 @return 年龄
 */
+ (NSInteger)ageWithDateOfBirth:(NSDate *)date;

#pragma mark - 根据经纬度计算两个位置之间的距离

/**
 根据经纬度计算两个位置之间的距离

 @param lat1 第一个纬度
 @param lat2 第二个纬度
 @param lng1 第一个经度
 @param lng2 第二个经度
 @return 两个点之间的距离
 */
+(double)distanceBetweenOrderBylat1:(double)lat1 lat2:(double)lat2 lng1:(double)lng1 lng2:(double)lng2;


/**
 将 yyyy-MM-dd HH:mm:ss 格式字符串准换成 yyyy-MM-dd HH:mm 格式

 @return 转换后的字符串
 */
- (NSString *)stringDateToHmString;

/**
 判断是否包含Emoji表情
 */
- (BOOL)containsEmoji;

+ (NSString *)translation:(NSString *)arebic;


/// 获取ip地址
+ (NSString *)IPAddress;
@end
